package modelo;

import java.util.Observable;
import java.util.Observer;

/**
* La Rueda observa a la pista y es notificada cada ves que cambia la posicion en largo del auto 
*/
public abstract class Ruedas extends Observable implements Observer{
	
	public static final double DISCRETIZACION_DE_LA_PISTA = 1; // 1 metro por posicion en pista

	public static final double MAX_VIDA_UTIL = 1;
	
    protected double danio;
    protected Pista pista;
    protected double danioPorLoma;
	protected double danioPorPozo;
	
	public Ruedas(){
		danio = 0;
		pista = null;
	}
			
	// al chocar con una loma le produce un danio
	public void interactuarConLomaDeBurro() {
		this.danio += this.danioPorLoma;
	}
	
	// al chocar con un pozo le produce un danio
	public void interactuarConPozo() {
		this.danio += this.danioPorPozo;
	}
	
//	// el juego se encarga de llamar este metodo internamente
//	 public void setPista(Pista pista){
//	    this.pista = pista; 
//	    this.addObserver(this.pista.get); // el juego observa las ruedas
//	}
	
	public abstract void interactuarConAsfalto();
	public abstract void interactuarConRipio();
	public abstract void interactuarConTierra();
	
	/** la rueda observa la pista, y cada vez que esta cambia, interactua con la posicion actual
	 * del auto. */
	public void update(Observable o, Object arg) {
//		System.out.println(pista.getCarrera());
//		System.out.println(pista.getCarrera().estaPausada());
//		System.out.println(!pista.getCarrera().estaPausada());
		/*if (!pista.getCarrera().estaPausada()){*/
			Casillero casillero = this.pista.getCasillero();
			
//			System.out.print("no pase: ");
//			System.out.println(casillero.aunNoPase());
		System.out.println("Ruedas.update");
			/*if (casillero.aunNoPase()){
				if (casillero.tieneObstaculo())
					casillero.getObstaculo().interactuarConRuedas(this.pista.getAuto().getRuedas());*/
				//casillero.getSuperficie().interactuarConRuedas(this.pista.getAuto().getRuedas());
			//}
			setChanged();
			notifyObservers();
		/*}*/
	}

	public double getDanio() {
		return danio;
	}
	
    public void reiniciar(){
		this.danio = 0;
		pista = null;
    }
    
    public void setPista(Pista pista){
		this.pista = pista;
    }
}
